/*
 * File Name：MultiseriateWheelView.java
 * Copyright：Copyright 2008-2015 CiWong.Inc. All Rights Reserved.
 * Description： MultiseriateWheelView.java
 * Modify By：res-dlzhou
 * Modify Date：2015年5月28日
 * Modify Type：Add
 */
package com.meitianhui.convenitenbuy.widget.wheelview;

import android.annotation.SuppressLint;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;

import com.meitianhui.convenitenbuy.R;
import com.meitianhui.convenitenbuy.widget.wheelview.adapter.ArrayWheelAdapter;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * 三列选择WheelsView(时间选择控件，地区选择控件)
 * 
 * @author res-dlzhou
 * @version ciwong v.1.0 2015年5月28日
 * @since ciwong v.1.0
 */
public abstract class MultiseriateWheelView implements View.OnClickListener,
        OnWheelChangedListener
    {
        /** 主布局 */
        private View containerView;

        /**
         *
         * 可见项
         *
         */
        private static int WHELLVIEW_VISIBLE_ITEM = 7;


        /** 上下文 */
        protected Context mContext;

        /** 第一列 WheelView */
        protected WheelView mFirstWheelView;

        /** 第二列 WheelView */
        protected WheelView mSecondWheelView;

        /** 第三列 WheelView */
        protected WheelView mThirdWheelView;

        /** 第一列 WheelView数据适配器 */
        protected ArrayWheelAdapter<String> mFirstWheelViewAdapter;

        /** 第二列 WheelView数据适配器 */
        protected ArrayWheelAdapter<String> mSecondWheelViewAdapter;

        /** 确定按钮 */
        private Button mConfirmBtn;

        /** 取消按钮 */
        private Button mCancleBtn;


        /** 第一列日期数据集 */
        public List<String> mDatetList;

        /** 第二列时数据集 */
        public List<String> mHourdList;

        /** 第三列分数据集 */
        public List<String> mMinuteList;


        /** 默认长度为7 */
        private int defaultMaximumLength = 13;

        /** 字体大小 */
        private int textSize = 15;

        public MultiseriateWheelView(Context context)
        {
            this.mContext = context;
            initView();
        }

        /**
         * 获取布局
         *
         * @return
         */
    public View getContainerView()
    {
        return containerView;
    }
    /** 点击确定按钮 */
    public abstract void onClickConfirmBtn();

    /** 点击取消按钮 */
    public abstract void onClickCancleBtn();

    /**
     * 刷新数据
     */
    public void notifyDataSetChanged()
    {
//        mFirstWheelView.notifyDataSetChanged();
//        mSecondWheelView.notifyDataSetChanged();
//        mThirdWheelView.notifyDataSetChanged();
    }

    /**
     * 设置第一列WheelView索引
     *
     * @param index
     */
    public void setFirstCurrentItem(int index)
    {
        mFirstWheelView.setCurrentItem(index);
    }

    /**
     * 设置第二列WheelView索引
     *
     * @param index
     */
    public void setSecondCurrentItem(int index)
    {
        mSecondWheelView.setCurrentItem(index);
    }

    /**
     * 设置第三列WheelView索引
     *
     * @param index
     */
    public void setThirdCurrentItem(int index)
    {
        mThirdWheelView.setCurrentItem(index);
    }

    /**
     * 初始化视图
     */
    private void initView()
    {
        containerView = LayoutInflater.from(mContext).inflate(
                R.layout.wheels_layout, null);

        mFirstWheelView = (WheelView) containerView
                .findViewById(R.id.date_wheelView);
        mSecondWheelView = (WheelView) containerView
                .findViewById(R.id.periodTime_wheelView);
        mThirdWheelView = (WheelView) containerView
                .findViewById(R.id.time_wheelView);
        mConfirmBtn = (Button) containerView.findViewById(R.id.btn_confirm);
        mCancleBtn = (Button) containerView.findViewById(R.id.btn_cancle);
//        // 设置显示的字体大小
//        mFirstWheelView.setTextSize(textSize);
//        mSecondWheelView.setTextSize(textSize);
//        mThirdWheelView.setTextSize(textSize);
        // // 设置循环
        mFirstWheelView.setCyclic(true);
        mSecondWheelView.setCyclic(true);
        mThirdWheelView.setCyclic(true);
        mConfirmBtn.setOnClickListener(this);
        mCancleBtn.setOnClickListener(this);
        init();
        loadData();
        initAdapter();
        // 设置监听器
        mFirstWheelView.addChangingListener(this);
        mSecondWheelView.addChangingListener(this);
        mThirdWheelView.addChangingListener(this);
    }

    /**
     * 初始化
     */
    private void init()
    {


        mFirstWheelView.setVisibleItems(WHELLVIEW_VISIBLE_ITEM);
        mSecondWheelView.setVisibleItems(WHELLVIEW_VISIBLE_ITEM);
        mThirdWheelView.setVisibleItems(WHELLVIEW_VISIBLE_ITEM);

        mDatetList = new ArrayList<String>();
        mHourdList = new ArrayList<String>();
        mMinuteList = new ArrayList<String>();


    }



    /**
     * 获取今天之后的日期数据集
     *
     * @param count
     *            获取的天数
     * @return
     */
    @SuppressLint("SimpleDateFormat")
    public List<String> getDateList(int count)
    {
        List<String> dates = new ArrayList<String>();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日  E");
        Calendar mCalendar = Calendar.getInstance();
        mCalendar.setTime(new Date());
        for (int i = 1; i < count; i++)
        {
            String ss = sdf.format(mCalendar.getTime());
            dates.add(ss);
            mCalendar.add(Calendar.DATE, 1);
        }
        return dates;
    }

    /**
     * 获取小时数据集
     *
     * @param isLimit
     *            true为限制当前小时之后的时间
     * @return
     */
    public List<String> getHourList(boolean isLimit)
    {
        List<String> list = new ArrayList<String>();
        Calendar mCalendar = Calendar.getInstance();
        int curHour = mCalendar.get(Calendar.HOUR_OF_DAY);
        for (int i = 1; i <= 24; i++)
        {
            if (i <= curHour && isLimit)
            {
                continue;
            }
            if (i < 10)
            {
                list.add("0" + i);
            }
            else if (i == 24)
            {
                if (isLimit)
                {
                    continue;
                }
                list.add("0" + 0);
            }
            else
            {
                list.add(i + "");
            }
        }
        return list;
    }

    /**
     * 获取分钟
     *
     * @param num
     *            分钟间隔
     * @param isLimit
     *            true为限制当前分钟之前的时间
     * @return
     */
    public List<String> getminuteList(int num, boolean isLimit)
    {
        List<String> list = new ArrayList<String>();
        Calendar mCalendar = Calendar.getInstance();
        int curMinute = mCalendar.get(Calendar.MINUTE);
        for (int i = 0; i < 60; i += num)
        {
            if (i < curMinute && isLimit)
            {
                continue;
            }
            if (i < 10)
            {
                list.add("0" + i);
            }
            else
            {
                list.add(i + "");
            }
        }
        return list;
    }



    /**
     * 获取小时数据集
     *
     * @return
     */
    private List<String> getHourList()
    {
        List<String> list = new ArrayList<String>();
        for (int i = 1; i <= 24; i++)
        {
            if (i < 10)
            {
                list.add("0" + i);
            }
            else if (i == 24)
            {
                list.add("0" + 0);
            }
            else
            {
                list.add(i + "");
            }
        }
        return list;
    }

    /**
     * 获取分钟
     *
     * @param num
     *            分钟间隔
     * @return
     */
    private List<String> getminuteList(int num)
    {
        List<String> list = new ArrayList<String>();
        for (int i = 0; i < 60;)
        {
            if (i < 10)
            {
                list.add("0" + i);
            }
            else
            {
                list.add(i + "");
            }
            i = i + num;
        }
        return list;
    }
    /**
     * 加载数据
     */
    private void loadData()
    {
        mDatetList.addAll(getDateList(100));
        mHourdList.addAll(getHourList());
        // mMinuteList.addAll(getminuteList(5, false));
        mMinuteList.addAll(getminuteList(5));

    }
    /**
     * 初始化适配器
     */
    public void initAdapter()
    {
        if (mDatetList != null && mHourdList != null && mMinuteList != null)
        {
            mFirstWheelViewAdapter = new ArrayWheelAdapter<String>(mContext,mDatetList.toArray(new String[mDatetList.size()]));
            mSecondWheelViewAdapter = new ArrayWheelAdapter<String>(mContext,mHourdList.toArray(new String[mHourdList.size()]));
            mFirstWheelView.setViewAdapter(mFirstWheelViewAdapter);
            mSecondWheelView.setViewAdapter(mSecondWheelViewAdapter);
            mThirdWheelView.setViewAdapter( new ArrayWheelAdapter<String>(mContext,mMinuteList.toArray(new String[mMinuteList.size()])));
        }
    }

    @Override
    public void onClick(View v)
    {
        if (v.getId() == R.id.btn_confirm)
        {
            onClickConfirmBtn();
        }
        else if (v.getId() == R.id.btn_cancle)
        {
            onClickCancleBtn();
        }
    }

//    /**
//     * WheelView适配器
//     */
//    public class WheelViewAdapter implements WheelAdapter
//    {
//        /** 数据集合 */
//        private List<String> mList;
//
//        /** 显示最大长度 */
//        private int maxLength;
//
//        public WheelViewAdapter(List<String> list, int length)
//        {
//            this.mList = list;
//            this.maxLength = length;
//        }
//
//        @Override
//        public int getItemsCount()
//        {
//            return mList.size();
//        }
//
//        @Override
//        public String getItem(int index)
//        {
//            if (index >= 0 && index < getItemsCount())
//            {
//                return mList.get(index).toString();
//            }
//            return "";
//        }
//
//        @Override
//        public int getMaximumLength()
//        {
//            return maxLength;
//        }
//
//
//
//        @Override
//        public void registerDataSetObserver(DataSetObserver observer) {
//
//        }
//
//        @Override
//        public void unregisterDataSetObserver(DataSetObserver observer) {
//
//        }
//
//        @Override
//        public View getEmptyItem(View convertView, ViewGroup parent) {
//            return null;
//        }
//    }
}
